// 引入 axios 模块，此处使用默认导入方式，不需要大括号是因为 axios 的主模块导出的是一个默认对象（default export）
import axios from 'axios'
import { message } from 'ant-design-vue'
// 创建axios实例
const myAxios = axios.create({
  baseURL: 'http://localhost:8123',
  timeout: 6000,
  withCredentials: true, // 允许跨域请求时携带凭证（如 Cookie），用于需要登录态的接口请求
})
// 全局请求拦截器
myAxios.interceptors.request.use(
  function (config) {
    // config 是请求配置对象，由 axios 在发出请求前自动生成和填充
    // 包含了请求的 URL、方法、请求头、请求数据等信息
    return config
  },
  function (error) {
    // error 表示在请求过程中发生的错误对象
    // 可能包含网络错误、超时、服务器未响应等异常信息
    // Promise.reject(error) 创建一个立即以 error 原因为理由拒绝的 Promise。
    // 用于将请求拦截器中的错误传递给后续的 catch 处理程序，从而实现统一的错误处理流程。
    return Promise.reject(error)
  },
)
// 全局响应拦截器
myAxios.interceptors.response.use(
  function (response) {
    const { data } = response

    // 检查响应数据中的未登录状态码
    if (data.code === 40100) {
      if (
        !response.request.responseURL.includes('/user/get/login') &&
        !window.location.pathname.includes('user/login')
      ) {
        message.warning('请先登录')
        window.location.href = `/user/login?redirect=${window.location.href}`
      }
    }
    return response
  },
  function (error) {
    // 错误拦截器：将错误传递给后续处理链
    return Promise.reject(error)
  },
)
export default myAxios
